0100 ******************* 0110 * COSMIC DEFENDER * 0120 * BY * 0130 * PHILLIP ROEY * 0140 ******************* 0150 ; 0160 ; OPERATING SYSTEM EQUATES 0170 ; 0180 AUDCTL = $D208 0190 SKCTL = $D20F 0200 AUDF1 = $D200 0210 AUDC1 = $D201 0220 AUDF2 = $D202 0230 AUDC2 = $D203 0240 AUDF3 = $D204 0250 AUDC3 = $D205 0260 AUDF4 = $D206 0270 AUDC4 = $D207 0280 ATRACT = $4D 0290 VERTI = $0200 0300 DMACTL = $022F 0310 DLST = $0230 0320 GRACTL = $D01D 0330 GPRIOR = $026F 0340 PMBASE = $D407 0350 COLPM0 = 704 0360 COLPM1 = 705 0370 HCOLPM0 = $D012 0380 HCOLPM1 = $D013 0390 HCOLPM2 = $D014 0400 HCOLPM3 = $D015 0410 COLP0 = 708 0420 COLP1 = 709 0430 COLP2 = 710 0440 COLP3 = 711 0450 COLBK = 712 0460 HCOLP0 = $D016 0470 HCOLP1 = $D017 0480 HCOLP3 = $D019 0490 CONSOL = $D01F 0500 KEY = $02FC 0510 HPOSP0 = $D000 0520 STICK = $D300 0530 TRIG0 = $D010 0540 TIMER3 = $021C 0550 TIMER4 = $021E 0560 TIMER5 = $0220 0570 TIMERF3 = $022A 0580 TIMERF4 = $022C 0590 TIMERF5 = $022E 0600 NMIEN = $D40E 0610 SETVBV = $E45C 0620 XITVBV = $E462 0630 SIOINI = $E465 0640 HSCROL = $D404 0650 WSYNC = $D40A 0660 CHBAS = 756 0670 SIZEM = $D00C 0680 M0PF = $D000 0690 M0PL = $D008 0700 P0PF = $D004 0710 P0PL = $D00C 0720 HITCLR = $D01E 0730 CHORG = $E000 0740 RANDOM = $D20A 0750 ; 0760 ; PAGE ZERO EQUATES 0770 ; 0780 *= $80 0790 ; 0800 KILLU 1 COLLISION 0810 KILLIT 1 FLAGS 0820 KILLPL 1 DITTO 0830 OVER 1 GAMEOVER? 0840 FRAME 1 COUNTER 0850 PAUSE 1 PAUSE FLAG 0860 SNDF1 1 MISSLE SND 0870 SND1 1 LOCATIONS 0880 OXM0 1 MISSLE X 0890 OYM0 1 MISSLE Y 0900 XPY 1 EXPLOSION Y 0910 XPIMAGE 1 EXP. IMAGE# 0920 EXPTIME 1 EXP. TIMER 0930 TEMPLO 1 0940 TEMPHI 1 0950 SCRTEMP 1 0960 EXPLODE 1 EXP. SOUND CNTR 0970 TEMP 1 0980 TEMP2 1 0990 NONEW1 1 SCROLL FLAG 1000 XPLON 1 EXP. FLAG 1010 ABX 1 SCREEN POS. LSB 1020 ABY 1 SCREEN POS. MSB 1030 FX 1 1040 FY 1 1050 OX 1 PLAYER X 1060 OY 1 PLAYER Y 1070 MSL0 1 MISSLE FLG 1080 CSHIFT 1 DLI COLOR 1090 DSHIFT 1 SHIFT USE 1100 TITLF 1 TITLE SCRN FLAG 1110 ROCKSPD 11 1120 ROCKPOS 11 NASTY X LOC 1130 RIMAGE 11 1140 COLOR2 11 COLORS OF 1150 COLOR3 11 NASTIES 1160 ADR 2 1170 DLINE 1 NASTY COUNTER 1180 ; 1190 ; MISCELLANEOUS EQUATES 1200 ; 1210 ; 1220 SCRN = $3000 SCREEN MEM. 1230 PLAYER = $00 PMG MEMORY 1240 ; 1250 *= $2000 ORIGIN 1260 ; 1270 ; INITIALIZATION OF GAME 1280 ; 1290 START CLD 1300 LDY #
MAIN VBI ROUTINE 1320 LDA #7 1330 JSR SETVBV 1340 LDA #$3E ENABLE PMG 1350 STA DMACTL 1360 LDA #$03 1370 STA GRACTL 1380 LDA #34 1390 STA GPRIOR 1400 LDA #5 SET MISSLE 1410 STA SIZEM SIZE 1420 LDA #100 1430 STA COLP0 SET 1440 LDA #$26 PLAYFIELD 1450 STA COLP1 AND P/M 1460 LDA #$38 COLORS 1470 STA COLP2 1480 LDA #$D4 1490 STA COLP3 1500 LDA #0 1510 STA COLBK 1520 LDA #170 1530 STA COLPM0 1540 LDA #$36 1550 STA COLPM1 1560 LDA # >PLAYER POINT TO 1570 STA PMBASE P/M AREA 1580 ; 1590 ; MAKE 3 COPIES OF CHAR SET 1600 ; 1610 LDY #0 1620 COPY LDA CHORG,Y 1630 STA PLAYER+$0800,Y 1640 STA PLAYER+$0C00,Y 1650 STA PLAYER+$1000,Y 1660 LDA CHORG+256,Y 1670 STA PLAYER+$0900,Y 1680 STA PLAYER+$0D00,Y 1690 STA PLAYER+$1100,Y 1700 DEY 1710 BNE COPY 1720 ; 1730 ; INSTALL CUSTOM CHARACTERS 1740 ; 1750 LDY #119 1760 INST LDA CHSET,Y 1770 STA PLAYER+$0808,Y 1780 LDA CHSET2,Y 1790 STA PLAYER+$0C08,Y 1800 LDA CHSET3,Y 1810 STA PLAYER+$1008,Y 1820 DEY 1830 BPL INST 1840 LDA # >PLAYER+$0800 POINT TO 1850 STA CHBAS NEW CHAR. SET 1860 ; 1870 ; EACH NEW GAME STARTS HERE 1880 ; 1890 BEGIN JSR PLRINT CLEAR P/M 1900 JSR SNDINT KILL SOUND 1910 JSR CLRSCRN CLR SCREEN 1920 JSR VARINT INITIALIZE VARIABLES 1930 JSR TITLE DISPLAY TITLES 1940 JSR GRID ADD FFIELDS 1950 JSR ROCKS AND ROCKS 1960 JSR ROCKINT AND NASTIES 1970 ; 1980 ; MAIN GAME LOOP 1990 ; 2000 MLOOP JSR COLDET CHECK FOR COLLISIONS 2010 LDA CONSOL ABORT GAME? 2020 CMP #3 (OPTION) 2030 BNE MLOOP NO,LOOP 2040 BEQ BEGIN YES,RESTART 2050 ; 2060 ; INITIALIZE SOUND CHANNELS 2070 ; 2080 SNDINT JSR SIOINI 2090 LDA #0 2100 STA EXPLODE 2110 LDY #7 2120 STA AUDCTL 2130 SN1 STA AUDF1,Y 2140 DEY 2150 BPL SN1 2160 RTS 2170 ; 2180 ; ADD ROCKS TO SCREEN 2190 ; 2200 ROCKS LDA LEVEL GET NUMBER 2210 SEC OF ROCKS, 2220 SBC #17 AND PUT IN 2230 TAY X REG 2240 LDA #0 2250 STA ADR 2260 LDA NUMROCK,Y 2270 STA TEMP AND TEMP 2280 TAX 2290 R1 LDA RANDOM GET A VALID 2300 CMP #250 RANDOM 2310 BCS R1 LOCATION 2320 TAY 2330 R2 LDA RANDOM 2340 AND #$3E 2350 CMP #40 2360 BCS R2 2370 ADC #1 CHECK IF IT 2380 JSR EMPTY IS EMPTY 2390 BNE R1 NEXT! 2400 LDX TEMP GET # OF ROCKS FOR 2410 R3 LDA RANDOM 2ND PAGE OF SCRN MEM 2420 CMP #48 GET A VALID 2430 BCC R3 LOCATION 2440 CMP #255 2450 BEQ R3 2460 TAY 2470 R4 LDA RANDOM 2480 AND #$3E 2490 CMP #40 2500 BCS R4 2510 JSR EMPTY LOOK FOR AN EMPTY SEAT. 2520 BNE R3 NEXT! 2530 RTS 2540 ; 2550 EMPTY CLC CHECK TO MAKE 2560 ADC # >SCRN SURE THE SPACE 2570 STA ADR+1 FOR ALL FOUR 2580 LDA (ADR),Y PARTS IS VACANT 2590 INY 2600 ORA (ADR),Y 2610 INC ADR+1 2620 INC ADR+1 2630 ORA (ADR),Y 2640 DEY 2650 ORA (ADR),Y 2660 BNE RX NO VACANCY! EXIT 2670 DEC ADR+1 POKE 4 2680 DEC ADR+1 PART ROCK 2690 LDA #1 INTO 2700 STA (ADR),Y SCREEN 2710 LDA #2 MEMORY 2720 INY IN LIVING 2730 STA (ADR),Y COLOR... 2740 INC ADR+1 2750 INC ADR+1 2760 LDA #4 2770 STA (ADR),Y 2780 LDA #3 2790 DEY 2800 STA (ADR),Y 2810 LDA # >SCRN 2820 STA ADR+1 2830 DEX DEC COUNTER 2840 RX RTS 2850 ; 2860 NUMROCK .BYTE 40,60,70,100,125,70,100,80,100 2870 ; 2880 ; CHECK FOR COLLISIONS 2890 ; 2900 COLDET LDA M0PF HAS MISSLE HIT? 2910 BEQ C1 NO,CONT... 2920 STA KILLIT YES,SET FLG 2930 C1 LDA M0PL HIT NASTY? 2940 AND #$FC 2950 BEQ C2 NO,CONT... 2960 STA KILLPL YES,SET FLG 2970 C2 LDA P0PF HIT WALL OR ROCK? 2980 BNE DIE YES,SET FLAG 2990 LDA P0PL DID WE RUN 3000 AND #$FD INTO NASTY? 3010 BEQ NODIE NO. EXIT 3020 DIE STA KILLU 3030 STA HITCLR 3040 NODIE RTS 3050 ; 3060 ; CLEAR OUT SCROLLING PORTION OF SCREEN 3070 ; 3080 CLRSCRN LDA #42+ >SCRN 21 LINES * 3090 STA ADR+1 2 PAGES + SCRN ADDR 3100 LDX #0 3110 STX ADR 3120 LDY #0 3130 CL1 TXA LOOP UNTIL 3140 STA (ADR),Y WE'VE GOT 3150 INY LOTS OF 3160 BNE CL1 NOTHING 3170 DEC ADR+1 3180 LDA # >SCRN-1 3190 CMP ADR+1 3200 BNE CL1 3210 RTS 3220 ; 3230 ; ZERO OUT P/M MEMORY 3240 ; 3250 PLRINT LDA #0 3260 TAY 3270 PL1 STA PLAYER+$0300,Y 3280 STA PLAYER+$0400,Y 3290 STA PLAYER+$0500,Y 3300 STA PLAYER+$0600,Y 3310 STA PLAYER+$0700,Y 3320 INY 3330 BNE PL1 3340 RTS 3350 ; 3360 ; REINITIALIZE GAME VARIABLES 3370 ; 3380 VARINT LDA #0 3390 STA PAUSE 3400 STA KILLU 3410 STA KILLIT 3420 STA KILLPL 3430 STA FX 3440 STA FY 3450 STA XPY 3460 STA XPIMAGE 3470 STA ABX 3480 STA NONEW1 3490 LDA # >SCRN 3500 STA ABY 3510 LDA #19 3520 STA LIVES 3530 STA OVER 3540 LDA #$54 LOAD MEMORY SCAN 3550 STA ML2 3560 STA HITCLR 3570 LDA #50 3580 STA OX 3590 LDA #100 3600 STA OY 3610 STA FRAME 3620 RTS 3630 ; 3640 ; PLAYER BUYS CEMENT OVERSHOES 3650 ; 3660 BITEIT LDA XPLON ALREADY BITING IT? 3670 BNE BT1 YES,CONT... 3680 STA SND1 KILL SOUND 3690 STA XPIMAGE 3700 STA HPOSP0+1 EXPLOSION 3710 LDA #1 SET DEATH 3720 STA XPLON FLAG 3730 JSR SNDINT KILL REST OF SOUND 3740 JSR MISEND AND MISSLE 3750 LDA #100 SET TIMER 3760 STA FRAME 3770 LDA #20 3780 STA AUDCTL MAKE DEATH 3790 LDA #200 TYPE NOISES 3800 STA AUDF4 3810 LDA #135 3820 STA AUDC3 3830 STA AUDC4 3840 BT1 LDA RANDOM FLASH 3850 AND #6 SHIP 3860 STA HCOLPM0 IN A NICE 3870 STA HCOLPM1 GREY 3880 LDA RANDOM PALLOR. 3890 STA AUDF1 MORE NOISE 3900 LDA RANDOM 3910 STA AUDF2 3920 LDA RANDOM 3930 AND #$DF 3940 STA AUDC1 3950 STA AUDC2 3960 DEC FRAME DONE KILLING? 3970 BNE DEDEND NO. 3980 JSR SNDINT KILL NOISE 3990 LDA #50 REST SHIP 4000 STA OX LOCATION 4010 STA HITCLR 4020 LDA #100 4030 STA OY 4040 LDA #0 4050 STA XPLON CLEAR FLAGS 4060 STA KILLU 4070 DEC LIVES ZAP A LIFE 4080 LDA LIVES ANY LEFT? 4090 CMP #16 4100 BEQ GMOVER NO? THE BIG SLEEP! 4110 LDA #0 YES,RESET 4120 STA ABX TO START 4130 LDA # >SCRN OF SCREEN 4140 STA ABY 4150 STA HITCLR 4160 JSR SCREEN CLEAN UP 4170 JSR PLRINT SCREEN AND 4180 JSR ROCKINT NASTIES 4190 DEDEND JMP XITVBV 4200 ; 4210 GMOVER JSR PLRINT CLEAN UP 4220 JSR SNDINT SCREEN + 4230 LDA #0 SOUND 4240 STA KILLU AND 4250 LDA #1 SET GAME 4260 STA HITCLR OVER 4270 STA OVER FLAG 4280 LDA # BLANK MIDDLE OF 4320 STA ML1+2 THE SCREEN 4330 STA ML3+2 4340 LDA # MESSAGE 4370 STA ML2+2 4380 LDA #$46 4390 STA ML2 4400 LDA #255 4410 STA TIMERF5 HANG 4420 STA TIMER5 AROUND 4430 GM1 LDA TIMERF5 AWHILE 4440 BNE GM1 THEN 4450 JMP BEGIN ALL OVER 4460 ; 4470 ; VERTICAL BLANK INTERRUPT 4480 ; THIS IS WHERE ALL THE ACTION IS! 4490 ; 4500 MAIN LDA #0 4510 STA DLINE POINT TO 4520 LDA OVER IS GAME ASLEEP? 4530 BNE ENDVB YES,BYE... 4540 STA ATRACT NO ATTRACT MODE 4550 LDA KILLPL HIT NASTY? 4560 BEQ MA2 NO,CONT.. 4570 JSR XPINIT YES,KILL 4580 JSR KILLPLR IT 4590 MA2 LDA KILLU HIT US? 4600 BEQ MA1 NO,CONT... 4610 JMP BITEIT YES,SUICIDE 4620 MA1 LDA KEY SPACEBAR 4630 CMP #$21 PRESSED 4640 BNE NOKEY NO,BYE 4650 LDA #255 YES TOGGLE 4660 STA KEY PAUSE 4670 LDA PAUSE FLAG 4680 EOR #255 4690 STA PAUSE 4700 NOKEY LDA PAUSE FLAG SET? 4710 BNE ENDVB YES,BYE... 4720 JSR ANIMATE ROTATE CHAR SETS 4730 JSR ATTACK MOVE NASTYS 4740 JSR RSTICK READ JOYSTICK 4750 JSR MOVE MOVE SHIP 4760 JSR MISL AND MISSLES 4770 JSR SOUND BOOM 4780 JSR XPLODE FIREWORKS 4790 JSR SCROLL SCROLL SCREEN 4800 JSR SCREEN UPDATE DISP. LIST 4810 ENDVB LDA TITLF TITLES? 4820 BEQ EN1 NO,BYE... 4830 LDA # TDLI 4860 STA VERTI+1 4870 EN1 JMP XITVBV 4880 ; 4890 ; READ JOYSTICK 4900 ; 4910 RSTICK LDA STICK GET STICK 4920 LDX OY CHECK STICK FOR 4930 LSR A MOVEMENT IN A 4940 BCS RS1 DIRECTION AND 4950 CPX #32 CHECK IF WE ARE 4960 BEQ RS1 AT OUR LIMITS IN 4970 DEC OY THAT DIRECTION 4980 RS1 LSR A 4990 BCS RS2 5000 CPX #190 5010 BEQ RS2 5020 INC OY 5030 RS2 LDX OX 5040 LSR A 5050 BCS RS3 5060 CPX #50 5070 BEQ RS3 5080 DEC OX 5090 RS3 LSR A 5100 BCS RS4 5110 CPX #100 5120 BEQ RS4 5130 INC OX 5140 RS4 RTS 5150 ; 5160 ; MOVE PLAYER0 AND MISSLE1 (YOUR SHIP) 5170 ; 5180 MOVE LDX OX 5190 STX HPOSP0 5200 INX 5210 INX 5220 STX HPOSP0+5 5230 LDY OY 5240 LDX #8 5250 MO0 LDA SHAPE,X 5260 STA PLAYER+$0400,Y 5270 LDA PLAYER+$0300,Y 5280 AND #$F3 5290 STA PLAYER+$0300,Y 5300 INY 5310 DEX 5320 BPL MO0 5330 LDY OY 5340 LDA PLAYER+$0303,Y 5350 ORA #$0C 5360 STA PLAYER+$0303,Y 5370 LDA PLAYER+$0304,Y 5380 ORA #$04 5390 STA PLAYER+$0304,Y 5400 LDA PLAYER+$0305,Y 5410 ORA #$0C 5420 STA PLAYER+$0305,Y 5430 RTS 5440 ; 5450 ; SHIP SHAPE (ARGH!) 5460 ; 5470 SHAPE .BYTE 0,$C0,$70,0,$73,0,$70,$C0,0 5480 ; 5490 ; MOVE MISSLE AND MISSLE SOUND 5500 ; 5510 MISL LDA MSL0 ACTIVE? 5520 BNE MSMOV YES,MOVE IT 5530 LDA TRIG0 TRIGGER PRESSED? 5540 BNE MSLEND NO,BYE... 5550 LDA #1 SET FLAG 5560 STA MSL0 5570 LDY OY GET Y COORD 5580 LDA #3 PUT MISSLE ON SCREEN 5590 STA PLAYER+$0304,Y 5600 STY OYM0 STORE Y 5610 LDA #$25 INITIALIZE 5620 STA AUDC1 MISSLE 5630 LDA #50 SOUND 5640 STA SNDF1 5650 LDA OX CALCULATE 5660 ADC #6 INITIAL X 5670 STA OXM0 COORD 5680 MSMOV INC OXM0 MOVE MISSLE 5690 INC OXM0 RIGHT 5700 LDA OXM0 5710 STA HPOSP0+4 5720 INC SNDF1 DECREASE 5730 INC SNDF1 FREQUENCY 5740 LDA SNDF1 5750 STA AUDF1 5760 LDA #205 MISSLE AT EDGE? 5770 CMP OXM0 5780 BCC MISEND YES,KILL MISSLE 5790 LDA KILLIT DID MISSLE HIT? 5800 BEQ MSLEND NO,BYE... 5810 JSR LOCATE YES,BUT WHAT&WHERE 5820 JSR ERASE ZAP IT 5830 MISEND LDA #0 MISSLE DEAD 5840 STA AUDC1 SO KILL SOUND 5850 STA MSL0 CLEAR FLAG 5860 STA KILLIT 5870 LDY OYM0 ERASE MISSLE 5880 LDA PLAYER+$0304,Y 5890 AND #$FC 5900 STA PLAYER+$0304,Y 5910 MSLEND RTS 5920 ; 5930 ; SCROLL SCREEN 5940 ; 5950 SCROLL LDA TIMERF3 TIME YET? 5960 ORA NONEW1 OR AT END OF LEVEL? 5970 BNE M2 THEN DON'T SCROLL 5980 LDA LEVEL GET SCROLL 5990 SEC SPEED 6000 SBC #17 AND DROP 6010 TAY IT IN TIMER 6020 LDA SPEED,Y 3 AND RESET 6030 STA TIMER3 FLAG 6040 STA TIMERF3 6050 LDY FX SCROLLED WHOLE 6060 DEY CHARACTER? 6070 BPL M15 NO,CONT... 6080 INC ABX YES, UPDATE SCREEN ADD. 6090 BNE M14 WHOLE PAGE DONE? 6100 INC ABY YES, BUMP SCREEN PAGE 6110 M14 LDY #3 RESET 6120 M15 STY FX SCROLL CNTR 6130 M2 LDX FX 6140 STX HSCROL 6150 RTS 6160 ; 6170 ; UPDATE SCREEN MEMORY IN DL 6180 ; 6190 SCREEN LDY # >SCRN+$0200 ARE WE AT 6200 LDA ABY THE END OF 6210 CPY ABY 2ND PAGE OF SCREEN? 6220 BNE S11 NO,CONT.. 6230 DEC NONEW1 YES,DELAY TILL NEW LEVEL 6240 BNE SXIT BYE... 6250 JSR LEVELUP SET UP NEW LEVEL 6260 LDA # >SCRN RESET TO SCRN START 6270 S11 PHA 6280 LDX #20 # OF LINES TO BE SCROLLED 6290 LDY #6 OFFSET IN DL 6300 S0 LDA ABX GET LSB AND 6310 STA DSP,Y STORE IN DL 6320 INY 6330 PLA GET MSB AND 6340 STA DSP,Y STORE IN DL 6350 CLC ADD TWO 6360 ADC #2 PAGES 6370 PHA AND HIDE IT ON STACK TILL NEXT 6380 INY LOOP 6390 INY INC DL POINTER 6400 DEX DONE? 6410 BPL S0 NO,LOOP.. 6420 PLA YES, CLEAR STACK 6430 SXIT RTS 6440 ; 6450 SPEED .BYTE 3,3,2,2,2,2,2,1,1 6460 ; 6470 ; SCORE ROUTINE:ENTRY CONDITION 6480 ; XREG: SCORE DIGIT TO CHANGE 6490 ; YREG: AMOUNT TO ADD TO DIGIT 6500 ; 6510 SCOREIT INC SCORE,X GET DIGIT 6520 LDA SCORE,X AND BUMP IT 6530 CMP #26 DIGIT>9? 6540 BEQ BIGSCR YES. FIX IT 6550 SCR DEY NO. ARE WE 6560 BEQ SCREND DONE? YES. 6570 BNE SCOREIT NO. LOOP 6580 BIGSCR LDA #16 DIGIT=0 6590 STA SCORE,X STORE IT 6600 STA SCRTEMP SCORE CARRY FLAG 6610 BNE SCR LOOP... 6620 ; 6630 SCREND LDA SCRTEMP FLAG SET? 6640 BEQ SC1 NO. 6650 TXA LAST DIGIT? 6660 BEQ SC1 YES. 6670 DEX SET XREG 6680 LDY #1 AND YREG 6690 LDA #0 CLEAR FLAG 6700 STA SCRTEMP AND START 6710 BEQ SCOREIT ALL OVER 6720 SC1 JMP HIGHSC CHECK FOR HIGH SCORE 6730 ; 6740 ; FIND OUT WHERE WE HIT 6750 ; 6760 LOCATE LDA OYM0 GET Y COORD 6770 SEC AND CONVERT 6780 SBC #29 TO IRG4 6790 LSR A SCREEN 6800 LSR A COORDINATES 6810 AND #$FE ADD THE 6820 CLC START OF 6830 ADC DSP+7 SCREEN MEM. 6840 STA TEMPHI SHAKE WELL AND VIOLA! THE MSB 6850 LDA FX GET LSB OF 6860 ASL A SCREEN 6870 CLC ADD THE MISSLES 6880 ADC OXM0 X COORD 6890 SEC CONVERT 6900 SBC #39 TO IRG4 6910 LSR A COORDINATES 6920 LSR A ADD SCROLL 6930 CLC 6940 ADC ABX AND WE GET 6950 STA TEMPLO THE LSB 6960 BCC LOC1 OVER BORDER THEN 6970 INC TEMPHI BUMP MSB 6980 LOC1 RTS 6990 ; 7000 ; FIND OUT WHAT WE HIT 7010 ; 7020 ERASE LDA TEMPLO GET SCREEN 7030 STA ADR MEMORY AND 7040 LDA TEMPHI SEARCH TILL 7050 STA ADR+1 WE FIND A 7060 STA HITCLR NONZERO 7070 LDY #0 CHARACTER 7080 LDA (ADR),Y (A VICTIM!) 7090 BNE GOTIT 7100 INY 7110 LDA (ADR),Y 7120 BNE GOTIT 7130 INY 7140 LDA (ADR),Y 7150 BEQ LOC1 7160 GOTIT CMP #1 IF CHAR IS 7170 BEQ ERASE4 1-4,ITS A 7180 CMP #2 ROCK. 7190 BNE GOT1 SET TO TOP 7200 DEC ADR RIGHT CHAR 7210 JMP ERASE4 OF ROCK, 7220 GOT1 CMP #3 THEN JUMP 7230 BEQ GOT2 TO ERASE4 7240 CMP #4 7250 BNE GOT4 7260 DEC ADR 7270 GOT2 DEC ADR+1 7280 DEC ADR+1 7290 JMP ERASE4 7300 GOT4 CMP #10 GENERATOR? 7310 BNE GOT5 NO,CONT.. 7320 LDA #13 YES,KILL IT 7330 STA (ADR),Y SET TO TOP 7340 INC ADR+1 OF FIELD. 7350 INC ADR+1 7360 JMP ERASE2V ERASE IT! 7370 GOT5 CMP #9 LOWER GENERATOR? 7380 BNE LOC1 NO,BYE.. 7390 LDA #13 YES,KILL IT 7400 STA (ADR),Y SET TO TOP 7410 DEC ADR+1 OF FORCE 7420 DEC ADR+1 FIELD. 7430 DEC ADR+1 7440 DEC ADR+1 7450 JMP ERASE2V ERASE IT. 7460 ; 7470 ERASE4 LDA #0 ERASE THE 7480 STA (ADR),Y FOUR PART 7490 INC ADR+1 ROCK BY 7500 INC ADR+1 STORING A 7510 STA (ADR),Y BLANK IN 7520 INY EACH OF 7530 STA (ADR),Y THE FOUR 7540 DEC ADR+1 FORMER 7550 DEC ADR+1 POSITIONS 7560 STA (ADR),Y 7570 LDX #3 SET SCORE 7580 LDY #5 TO 50 PTS. 7590 BNE ER2 7600 ; 7610 ERASE2V LDA #0 STORE A 7620 STA (ADR),Y BLANK CHAR 7630 INC ADR+1 IN THE 2 7640 INC ADR+1 FORCE FIELD 7650 STA (ADR),Y POSITIONS 7660 LDX #2 SET SCORE 7670 LDY #2 TO 200 PTS. 7680 ER2 STA KILLIT CLR COLLISION FLG 7690 JSR SCOREIT 7700 LDA #25 SET BOOM 7710 STA EXPLODE COUNTER 7720 JMP XPINIT FIREWORKS 7730 ; 7740 ; BOOM! 7750 ; 7760 SOUND LDA EXPLODE FLAG SET? 7770 BEQ SNDEND NO,BYE... 7780 LDA TIMERF4 TIME YET? 7790 BNE SNDEND NO,BYE... 7800 DEC EXPLODE SET TO NEXT 7810 LDA EXPLODE TONE+CONTRL 7820 STA TIMERF4 RESET FLAG 7830 BEQ SNDEND ANY LEFT? NO,BYE 7840 TAY YES,GET 7850 LDA EXPSND,Y THE NEXT 7860 STA AUDF2 TONE + CTL 7870 LDA RANDOM AND PUT'EM 7880 ORA #$C0 IN (THE) 7890 STA AUDF3 POKEY 7900 LDA EXPTONE,Y 7910 ORA #$40 7920 STA AUDC2 7930 STA AUDC3 7940 LDA #2 7950 STA TIMER4 7960 SNDEND RTS 7970 ; 7980 EXPSND .BYTE $F5,$F4,$F3,$F2,$F2 7990 .BYTE $F0,$F2,$F5,$E9,$E0 8000 .BYTE $EF,$F0,$F1,$F2,$F3 8010 .BYTE $F4,$F5,$F4,$F1,$F5 8020 .BYTE $F2,$F3,$F4,$F5,$F5 8030 EXPTONE .BYTE 0,0,1,2,3,4,5,5,6,6 8040 .BYTE 7,7,8,8,9,9,9,10,10,10 8050 ; 8060 ; NEXT LEVEL,PLEASE.... 8070 ; 8080 LEVELUP INC LEVEL BUMP LEVEL 8090 LDA LEVEL LVL>9? 8100 CMP #26 8110 BNE LV2 NO,CONT... 8120 LDA #20 YES,BACK TO 8130 STA LEVEL LEVEL FOUR 8140 LV2 LDA #$40 DISABLE INTERRUPTS 8150 STA NMIEN AND TELL COMPUTER 8160 PHP TO STAY PUT 8170 SEI TILL NOTIFIED! 8180 JSR CLRSCRN CLEAR SCRN 8190 LDA #0 RESET TO 8200 STA ABX SCRN START 8210 STA MSL0 KILL MISSLE 8220 JSR SNDINT AND SOUND 8230 LDA # >SCRN PAGE 1 OF 8240 STA ABY SCREEN 8250 JSR SCREEN UPDATE DL 8260 STA HITCLR CLEAR COLLISIONS 8270 JSR GRID ADD GRIDS 8280 JSR ROCKS AND ROCKS 8290 LDA #0 RESET AND 8300 LDX #10 ADD NASTIES 8310 LV1 STA RIMAGE,X 8320 DEX 8330 BPL LV1 8340 JSR ROCKINT 8350 INC LIVES ADD AN EXTRA LIFE 8360 PLP AND BACK TO 8370 LDA #$C0 THE REAL 8380 STA NMIEN WORLD.... 8390 RTS 8400 ; 8410 ; ROTATE CHARACTER SETS 8420 ; 8430 ANIMATE LDA TIMERF5 TIME YET? 8440 BNE AN3 8450 LDA #4 RESET TIMER 8460 STA TIMER5 AND FLAG 8470 STA TIMERF5 8480 LDA CHBAS 8490 CMP # >PLAYER+$1000 3RD SET? 8500 BEQ AN2 OOPS.. 8510 CLC NO,ADD 1K 8520 ADC # >1024 TO CHBAS 8530 BNE AN1 JMP ALWAYS 8540 AN2 LDA # >PLAYER+$0800 RESET TO 8550 AN1 STA CHBAS 1ST CHAR 8560 AN3 RTS SET AND BYE 8570 ; 8580 ; HIGH SCORE?!?!?! 8590 ; 8600 HIGHSC LDY #0 CHECK SCORE 8610 HI1 LDA SCORE,Y FROM MS TO 8620 CMP HIGH,Y LS DIGIT 8630 BEQ HI3 EQUAL LOOP 8640 BCC HSCOREND LOWER,CONT 8650 BCS NEWHIGH REPLACE HIGH SCORE 8660 HI3 INY 8670 CPY #4 8680 BNE HI1 LOOP.... 8690 NEWHIGH LDY #0 COPY 8700 NH1 LDA SCORE,Y SCORE INTO 8710 STA HIGH,Y HIGH SCORE 8720 INY 8730 CPY #4 8740 BNE NH1 LOOP... 8750 HSCOREND RTS 8760 ; 8770 ; ADD FORCE FIELD GRIDS 8780 ; 8790 GRID LDA LEVEL GET SPACE 8800 SEC BETWEEN 8810 SBC #17 GRIDS FOR LEVEL 8820 TAX 8830 LDA GATES,X AND THROW 8840 STA TEMP IN TEMP 8850 LDY #0 THEN GET 8860 LDA # >SCRN OFFSET AND 8870 STA TEMP2 ADD IT TO 8880 LDA OFFSET,X START OF 8890 STA ADR SCREEN MEM. 8900 GR1 LDA TEMP2 POKE THE 8910 STA ADR+1 3 GRID 8920 LDX #7 CHARACTERS 8930 GR2 LDA #5 INTO 8940 STA (ADR),Y MEMORY 8950 INC ADR+1 8960 INC ADR+1 8970 LDA #6 8980 STA (ADR),Y 8990 INC ADR+1 9000 INC ADR+1 9010 LDA #7 9020 STA (ADR),Y 9030 INC ADR+1 9040 INC ADR+1 9050 DEX 9060 BNE GR2 9070 GR3 LDA RANDOM FIND A 9080 AND #$1F VALID GATE 9090 CMP #20 LOCATION 9100 BCS GR3 9110 CMP #5 9120 BCC GR3 9130 DEC ADR AND ADD THE 9140 ASL A FORCE FIELD 9150 CLC AND 9160 ADC TEMP2 GENERATORS 9170 STA ADR+1 9180 LDA #8 9190 STA (ADR),Y 9200 DEC ADR+1 9210 DEC ADR+1 9220 LDA #9 9230 STA (ADR),Y 9240 DEC ADR+1 9250 DEC ADR+1 9260 LDA #140 FORCEFIELD 9270 STA (ADR),Y 9280 INY 9290 LDA #0 9300 STA (ADR),Y 9310 DEC ADR+1 9320 DEC ADR+1 9330 STA (ADR),Y 9340 DEY 9350 LDA #139 FORCEFIELD 9360 STA (ADR),Y 9370 DEC ADR+1 9380 DEC ADR+1 9390 LDA #10 9400 STA (ADR),Y 9410 DEC ADR+1 9420 DEC ADR+1 9430 LDA #8 9440 STA (ADR),Y 9450 LDA ADR ADD SPACE 9460 ADC TEMP AND SCREEN 9470 STA ADR LOCATION 9480 BCC GR1 BUMP MSB 9490 INC TEMP2 IF 9500 LDA TEMP2 NECESSARY 9510 CMP # >SCRN+$0100 OUT OF ROOM? 9520 BEQ GR1 NO,LOOP.. 9530 RTS 9540 ; 9550 GATES .BYTE 255,150,60,30,30,60,60,90,70 9560 OFFSET .BYTE 255,200,100,75,50,50,50,200,100 9570 ; 9580 ; MAIN GAME DLI 9590 ; 9600 DLI PHA SAVE XREG 9610 TXA AND A REG 9620 PHA 9630 LDX DLINE INC NASTY 9640 INC DLINE 9650 LDA ROCKPOS,X GET LOCATION 9660 STA HPOSP0+3 AND STORE IN PLR2 9670 STA HPOSP0+2 AND PLR3 9680 LDA COLOR2,X PUT COLOR 9690 STA HCOLPM2 DIRECTLY 9700 LDA COLOR3,X INTO 9710 STA HCOLPM3 HARDWARE REGISTERS 9720 CPX #10 ANY LEFT? 9730 BNE DL1 YES,LOOP.. 9740 LDA # DLI2 DLI 9770 STA VERTI+1 9780 DL1 PLA RESTORE A 9790 TAX AND X 9800 PLA 9810 RTI 9820 ; 9830 DLI2 PHA 9840 LDA #$F8 POKE SCORE 9850 STA HCOLP0 COLORS 9860 LDA #$98 DIRECTLY 9870 STA HCOLP1 INTO 9880 LDA #38 HARDWARE 9890 STA HCOLP3 REGISTERS 9900 LDA # DLI DLI 9930 STA VERTI+1 9940 PLA 9950 RTI 9960 ; 9970 ; ATTACTING NASTIES..... 9980 ; 9990 ATTACK LDX #0 010000 STX DLINE 010010 AT3 LDA ROCKSPD,X NASTY ACTIVE? 010020 BEQ AT1 NO,GIVE IT LIFE! 010030 LDA ROCKPOS,X YES MOVE 010040 SEC IT 010050 SBC ROCKSPD,X LEFT 010060 BNE AT2 STILL ON SCREEN? 010070 STA ROCKSPD,X NO, RESET POSITION 010080 LDA #254 AND SPEED 010090 AT2 STA ROCKPOS,X 010100 AT4 INX MORE 010110 CPX #10 NASTIES? 010120 BNE AT3 YES,LOOP.. 010130 RTS 010140 AT1 LDA NONEW1 NOT END OF LEVEL? 010150 ORA RANDOM CAN WE GIVE IT LIFE? 010160 BNE AT4 NO,DRATS.. 010170 LDA #1 010180 LDY RANDOM 010190 CPY #15 A FAST ONE? 010200 BCS AT0 010210 LDA #2 YES. FUN!!! 010220 AT0 STA ROCKSPD,X 010230 LDA LEVEL LVL>6? 010240 CMP #22 010250 BCC AT10 NO. LOOP 010260 INC ROCKSPD,X SPEED THINGS UP 010270 AT10 JMP AT4 LOOP.... 010280 ; 010290 IMAGE2 .BYTE 0,0,0,0,0,0,$78,$FC 010300 .BYTE $78,0,0,0,0,0,0,0 010310 .BYTE 0,0,0,0,$1C,$3E,$7F,$6B 010320 .BYTE $7F,$5D,$22,$1C,0,0,0,0 010330 .BYTE 0,0,0,0,0,0,$7F,$F8 010340 .BYTE $7F,0,0,0,0,0,0,0 010350 .BYTE 0,0,0,0,$18,$3C,$7E,$3C 010360 .BYTE $5A,$66,$7E,$3C,$18,0,0,0 010370 .BYTE 0,0,0,0,7,$0F,$0E,$1C 010380 .BYTE 0,$1C,$0E,$0F,7,0,0,0 010390 .BYTE 0,0,0,0,0,0,$2C,$24 010400 .BYTE $2F,$3D,9,$0F,0,0,0,0 010410 .BYTE 0,0,0,0,0,0,$10,$38 010420 .BYTE $7C,$38,$10,0,0,0,0,0 010430 .BYTE 0,0,0,0,0,0,0,2 010440 .BYTE 7,2,0,0,0,0,0,0 010450 IMAGE1 .BYTE 0,0,0,7,$0E,$3C,0,$FC 010460 .BYTE 0,$3C,$0E,7,0,0,0,0 010470 .BYTE 0,0,0,0,0,0,0,$14 010480 .BYTE 0,$22,$1C,0,0,0,0,0 010490 .BYTE 0,0,0,0,3,7,$3F,$3F 010500 .BYTE $3F,7,3,0,0,0,0,0 010510 .BYTE 0,0,0,$18,$24,$42,$81,$C3 010520 .BYTE $E7,$FF,$7E,$3C,$18,0,0,0 010530 .BYTE 0,0,0,0,$0F,0,0,0 010540 .BYTE $FC,0,0,0,$0F,0,0,0 010550 .BYTE 0,0,0,0,$F0,$90,$90,$D0 010560 .BYTE $0B,$09,$09,$0F,0,0,0,0 010570 .BYTE 0,0,0,0,0,$10,$28,$44 010580 .BYTE $92,$44,$28,$10,0,0,0,0 010590 .BYTE 0,0,0,0,0,0,0,0 010600 .BYTE 2,0,0,0,0,0,0,0 010610 ; 010620 ; INITIALIZE NASTIES... 010630 ; 010640 ROCKINT LDA LEVEL ARE WE 010650 CMP #17 PAST THE 1ST LEVEL? 010660 BEQ RK7 NO,BYE.. 010670 LDA #10 READ THE 010680 STA TEMP IMAGES OF 010690 RK1 LDY #15 THE NASTIES 010700 LDA TEMP (PLAYERS 010710 ASL A 2 AND 3) 010720 ASL A INTO PMG 010730 ASL A MEMORY 010740 ASL A WHERE THE 010750 CLC DLI WILL 010760 ADC #34 FIND'EM. 010770 TAX 010780 RK2 LDA IMAGE1,Y 010790 STA PLAYER+$0600,X 010800 LDA IMAGE2,Y 010810 STA PLAYER+$0700,X 010820 DEX 010830 DEY 010840 BNE RK2 010850 DEC TEMP 010860 BNE RK1 010870 LDX #10 SET INITIAL POSITION 010880 RK4 LDA #254 OFF SCREEN AND 010890 STA ROCKPOS,X ZERO SPEED 010900 LDA #0 SO THEY 010910 STA ROCKSPD,X STAY 010920 DEX PUT UNTIL 010930 BPL RK4 WE ACTIVATE 010940 LDX #9 THEM 010950 LDA #4 010960 RK5 CLC 010970 ADC #$50 GIVE EACH 010980 STA COLOR2,X ONE TWO 010990 DEX DIFFERENT 011000 BPL RK5 COLORS 011010 LDX #9 011020 LDA #$88 011030 RK6 CLC 011040 ADC #$30 011050 STA COLOR3,X 011060 DEX 011070 BPL RK6 011080 RK7 RTS 011090 ; 011100 ; EXPLOSION (FIREWORKS) 011110 ; 011120 XPLODE LDA XPIMAGE GET IMAGE NUMBER. 011130 BEQ EXPEND ANY LEFT? NO,BYE... 011140 DEC EXPTIME TIME YET? 011150 BNE EXPEND NO,BYE... 011160 DEC XPIMAGE NEXT IMAGE 011170 LDA XPIMAGE 011180 ASL A OFFSET IN 011190 ASL A IMAGE DATA 011200 ASL A 011210 ORA #$07 011220 TAX 011230 LDA #8 011240 STA TEMP2 011250 LDY XPY 011260 XPLOOP LDA XPLOD,X STORE IMAGE 011270 STA PLAYER+$0500,Y IN PLAYER1 011280 DEX 011290 INY NEXT BYTE 011300 DEC TEMP2 ANY LEFT? 011310 BNE XPLOOP YES,LOOP 011320 LDA #6 NO SET 011330 STA EXPTIME TIMER 011340 LDA XPIMAGE 011350 BNE EXPEND 011360 STA HPOSP0+1 011370 EXPEND RTS 011380 XPINIT LDX #7 INITIALIZE 011390 LDA #8 EXPLOSION 011400 STA TEMP2 011410 LDY XPY GET IT'S 011420 JSR XPLOOP LOCATION 011430 LDA OYM0 AND PUT IT 011440 STA XPY ON THE 011450 LDA OXM0 SCREEN THEN 011460 STA HPOSP0+1 011470 LDA #9 SET IMAGE 011480 STA XPIMAGE POINTER 011490 LDA #1 AND TIMER 011500 STA EXPTIME 011510 RTS 011520 ; 011530 ; EXPLOSION SHAPE DATA 011540 ; 011550 XPLOD .BYTE 0,0,0,0,0,0,0,0 011560 .BYTE $81,0,0,0,0,0,0,$81 011570 .BYTE $81,$42,0,0,0,0,$42,$81 011580 .BYTE $89,$42,$24,$80,$01,$24,$42,$91 011590 .BYTE 8,$4A,$24,$C0,3,$24,$52,$1D 011600 .BYTE 8,8,$2C,$E0,7,$34,$10,$10 011610 .BYTE 0,8,8,$78,$1E,$10,$10,0 011620 .BYTE 0,0,8,$38,$1C,$10,0,0 011630 .BYTE 0,0,0,$18,$18,0,0,0 011640 ; 011650 ; KILL ATTACKING NASTIES! 011660 ; 011670 KILLPLR LDA OYM0 GET Y COORD 011680 SEC AND CONVERT 011690 SBC #28 TO GET # 011700 LSR A OF NASTY 011710 LSR A WE HIT 011720 LSR A 011730 LSR A 011740 TAX 011750 LDA #0 RESET SPEED AND POSITION 011760 STA ROCKSPD,X 011770 LDA #254 011780 STA ROCKPOS,X 011790 INC RIMAGE,X SET TO 011800 LDA RIMAGE,X NEXT NASTY 011810 STA TEMP IMAGE 011820 STX TEMP2 SCORE= 100 011830 TAY TIMES IMAGE 011840 LDX #2 NUMBER+1 011850 JSR SCOREIT 011860 LDX TEMP2 011870 LDY TEMP ANY IMAGES 011880 CPY #8 LEFT? 011890 BCC KL1 YES,NEXT 011900 LDA #0 NO,RESET 011910 STA RIMAGE,X TO IMAGE #0 011920 STA TEMP 011930 KL1 LDA #23 011940 STA EXPLODE 011950 TXA 011960 ASL A READ NEW 011970 ASL A NASTY 011980 ASL A INTO PMG 011990 ASL A MEMORY 012000 CLC 012010 ADC #49 012020 TAY 012030 LDA TEMP 012040 ASL A 012050 ASL A 012060 ASL A 012070 ASL A 012080 STA TEMP 012090 ORA #$0F 012100 TAX 012110 KL2 LDA IMAGE1,X 012120 STA PLAYER+$0600,Y 012130 LDA IMAGE2,X 012140 STA PLAYER+$0700,Y 012150 DEY 012160 DEX 012170 CPX TEMP DONE? 012180 BNE KL2 NO,LOOP... 012190 STX HITCLR YES,CLEAR 012200 LDA #0 COLL. FLAG 012210 STA KILLPL 012220 JMP MISEND KILL MISSLE 012230 ; 012240 ; TITLE SCREEN 012250 ; 012260 TITLE LDA # TITLEPG PAGE ON 012290 STA DLST+1 SCREEN 012300 JSR PLRINT GET RID OF PMG 012310 LDA #$C0 ENABLE DLI'S FOR 012320 STA NMIEN RAINBOW EFFECT 012330 INC TITLF SET FLAG 012340 LDA STLEVEL UPDATE 012350 STA LEVEL LEVEL 012360 LOOP LDA CONSOL IS SELECT 012370 CMP #5 PRESSED? 012380 BNE LOOP2 NO,CONT.. 012390 INC LEVEL YES,INC 012400 LDA LEVEL LEVEL 012410 CMP #26 LVL>9? 012420 BNE LP2 NO,CONT.. 012430 LDA #17 LVL=1 012440 LP2 STA LEVEL 012450 LDA #30 DELAY 1/2 012460 STA TIMER5 SECOND 012470 STA TIMERF5 012480 LOOP2 LDA LEVEL PUT NEW 012490 STA TITLE4+16 LEVEL 012500 JSR ANIMATE ON SCREEN 012510 LDA TRIG0 IF TRIGGER 012520 BEQ LP7 OR START 012530 LDA CONSOL IS PRESSED 012540 CMP #6 CONTINUE, IF NOT 012550 BNE LP3 LOOP... 012560 LP7 LDA # DSP SCREEN 012590 STA DLST+1 012600 LDA # DLI 012630 STA VERTI+1 012640 LDA #'0-32 012650 LDY #5 012660 LP5 STA SCORE-1,Y 012670 DEY 012680 BNE LP5 012690 STY OVER CLR FLAG 012700 STY TITLF 012710 LDA LEVEL SET LEVEL 012720 STA STLEVEL 012730 RTS 012740 LP3 LDA TIMERF5 DELAY LOOP 012750 BNE LOOP2 012760 BEQ LOOP 012770 ; 012780 STLEVEL .BYTE 17 012790 ; 012800 ; TITLE SCREEN DLI 012810 ; 012820 TDLI PHA SAVE X AND 012830 TXA A REGISTERS 012840 PHA 012850 LDX #15 012860 LDA DSHIFT GET COLOR 012870 STA CSHIFT 012880 TDLI1 LDA CSHIFT 012890 STA WSYNC WAIT FOR NEW SCAN LINE 012900 STA HCOLP0 STORE IT IN HARDWARE 012910 CLC ADD TWO 012920 ADC #2 012930 STA CSHIFT 012940 DEX ANY MORE LINES? 012950 BPL TDLI1 YES,LOOP 012960 LDX #15 RESET COUNT 012970 TDLI2 LDA CSHIFT GET COLOR 012980 STA WSYNC WAIT FOR NEW LINE 012990 STA HCOLP0 STORE IT 013000 SEC SUBTRACT 2 013010 SBC #2 TO GET THE 013020 STA CSHIFT MIRROR EFFECT 013030 DEX ANY MORE? 013040 BPL TDLI2 YES,LOOP 013050 LDA TIMERF4 TIME YET? 013060 BNE TDLIX NO,CONT.. 013070 LDA #1 YES,RESET 013080 STA TIMERF4 TIMER AND 013090 STA TIMER4 FLAG AND 013100 INC DSHIFT INC THE START COLOR 013110 TDLIX LDA # DLI2 013140 STA VERTI+1 013150 PLA RESTORE 013160 TAX REGISTERS 013170 PLA 013180 RTI 013190 ; 013200 ; TITLE PAGE DISPLAY LIST 013210 ; 013220 TITLEPG .BYTE $70,$70,$46 013230 .WORD SCORELN 013240 .BYTE $70,$F0,$47 013250 .WORD TITLE1 013260 .BYTE $47 013270 .WORD TITLE6 013280 .BYTE $70,$70,$46 013290 .WORD TITLE2 013300 .BYTE $46 013310 .WORD TITLE3 013320 .BYTE $F0,$47 013330 .WORD TITLE5 013340 .BYTE $70,$C6 013350 .WORD TITLE4 013360 .BYTE $70,$70,$70 013370 .BYTE $70,$70,$70,$46 013380 .WORD SCORELN 013390 .BYTE 6,6,$41 013400 .WORD TITLEPG 013410 ; 013420 TITLE1 .SBYTE " COSMIC " 013430 TITLE6 .SBYTE " DEFENDER" 013440 TITLE2 .SBYTE +$80," BY " 013450 TITLE3 .SBYTE +$80," phill roey " 013460 TITLE4 .SBYTE " select level: " 013470 TITLE5 .SBYTE +$80," analog computing " 013480 ; 013490 ; DISPLAY LIST 013500 ; 013510 DSP .BYTE $70,$70,$C6 013520 .WORD SCORELN 013530 .BYTE $54 013540 .WORD 0 013550 .BYTE $D4 013560 .WORD 0 013570 .BYTE $54 013580 .WORD 0 013590 .BYTE $D4 013600 .WORD 0 013610 .BYTE $54 013620 .WORD 0 013630 .BYTE $D4 013640 .WORD 0 013650 .BYTE $54 013660 .WORD 0 013670 ML1 .BYTE $D4 013680 .WORD 0 013690 ML2 .BYTE $54 013700 .WORD 0 013710 ML3 .BYTE $D4 013720 .WORD 0 013730 .BYTE $54 013740 .WORD 0 013750 .BYTE $D4 013760 .WORD 0 013770 .BYTE $54 013780 .WORD 0 013790 .BYTE $D4 013800 .WORD 0 013810 .BYTE $54 013820 .WORD 0 013830 .BYTE $D4 013840 .WORD 0 013850 .BYTE $54 013860 .WORD 0 013870 .BYTE $D4 013880 .WORD 0 013890 .BYTE $54 013900 .WORD 0 013910 .BYTE $D4 013920 .WORD 0 013930 .BYTE $54 013940 .WORD 0 013950 .BYTE $C6 013960 .WORD SCORELN 013970 .BYTE 6,6,$41 013980 .WORD DSP 013990 ; 014000 SCORELN .SBYTE +$80,"...................." 014010 .SBYTE +$80," score:" 014020 SCORE .SBYTE "00000" 014030 .SBYTE " lives:" 014040 LIVES .SBYTE "3" 014050 .SBYTE " hi:" 014060 HIGH .SBYTE "00000" 014070 .SBYTE " level:" 014080 LEVEL .SBYTE "1" 014090 BLANK .SBYTE " " 014100 MESSAGE .SBYTE " GAME OVER " 014110 ; 014120 ; CHARACTER SET #1 014130 ; 014140 CHSET .BYTE 0,1,1,20,17,26,21,85 014150 .BYTE 0,64,80,80,100,84,69,81 014160 .BYTE 89,89,26,21,17,5,1,0 014170 .BYTE 105,88,84,84,80,64,0,0 014180 .BYTE 255,255,215,215,215,215,255,255 014190 .BYTE 255,255,195,195,195,195,255,255 014200 .BYTE 255,255,235,235,235,235,255,255 014210 .BYTE 15,3,3,15,15,3,3,15 014220 .BYTE 63,245,245,234,234,245,245,63 014230 .BYTE 63,245,245,234,234,245,245,63 014240 .BYTE 195,60,0,195,60,0,195,60 014250 .BYTE 0,195,60,0,195,60,0,195 014260 .BYTE 63,240,240,192,192,240,240,63 014270 .BYTE $FF,$49,$49,$49,$49,$49,$49,$FF 014280 .BYTE 0,$1E,$21,$2D,$29,$2D,$21,$1E 014290 ; 014300 ; CHARACTER SET #2 014310 ; 014320 CHSET2 .BYTE 0,1,1,20,17,26,21,85 014330 .BYTE 0,64,80,80,100,84,69,81 014340 .BYTE 89,89,26,21,17,5,1,0 014350 .BYTE 105,88,84,84,80,64,0,0 014360 .BYTE 255,255,235,235,235,235,255,255 014370 .BYTE 255,255,215,215,215,215,255,255 014380 .BYTE 255,255,195,195,195,195,255,255 014390 .BYTE 15,3,3,15,15,3,3,15 014400 .BYTE 63,245,245,192,192,245,245,63 014410 .BYTE 63,245,245,192,192,245,245,63 014420 .BYTE 0,195,60,0,195,60,0,195 014430 .BYTE 60,0,195,60,0,195,60,0 014440 .BYTE 63,240,240,192,192,240,240,63 014450 .BYTE $FF,$92,$92,$92,$92,$92,$92,$FF 014460 .BYTE 0,$1E,$21,$2D,$29,$2D,$21,$1E 014470 ; 014480 ; CHARACTER SET #3 014490 ; 014500 CHSET3 .BYTE 0,1,1,20,17,26,21,85 014510 .BYTE 0,64,80,80,100,84,69,81 014520 .BYTE 89,89,26,21,17,5,1,0 014530 .BYTE 105,88,84,84,80,64,0,0 014540 .BYTE 255,255,195,195,195,195,255,255 014550 .BYTE 255,255,235,235,235,235,255,255 014560 .BYTE 255,255,215,215,215,215,255,255 014570 .BYTE 15,3,3,15,15,3,3,15 014580 .BYTE 63,245,245,213,213,245,245,63 014590 .BYTE 63,245,245,213,213,245,245,63 014600 .BYTE 60,0,195,60,0,195,60,0 014610 .BYTE 195,60,0,195,60,0,195,60 014620 .BYTE 63,240,240,192,192,240,240,63 014630 .BYTE $FF,$24,$24,$24,$24,$24,$24,$FF 014640 .BYTE 0,$1E,$21,$2D,$29,$2D,$21,$1E 014650 ; 014660 *= $02E0 RUN PROGRAM 014670 .WORD START 014680 .END